//package com.chen.util;
//
//import java.io.*;
//import java.nio.charset.Charset;
//import java.nio.file.Files;
//import java.nio.file.Paths;
//import java.util.zip.ZipEntry;
//import java.util.zip.ZipInputStream;
//
///**
// * UnZipUtils
// *
// * @author chenyj
// * @date 2023/07/19
// */
//public class UnZipUtils {
//    /**
//     * 解压zip压缩文件到指定目录
//     *
//     * @param zipPath zip压缩文件绝对路径
//     * @param descDir 指定的解压目录
//     */
//    public static void unZipFile(String zipPath, String descDir) throws IOException {
//        try {
//            File zipFile = new File(zipPath);
//            if (!zipFile.exists()) {
//                throw new IOException("要解压的压缩文件不存在");
//            }
//            File pathFile = new File(descDir);
//            if (!pathFile.exists()) {
//                pathFile.mkdirs();
//            }
//            InputStream input = Files.newInputStream(Paths.get(zipPath));
//            unzipWithStream(input, descDir, true);
//        } catch (Exception e) {
//            throw new IOException(e);
//        }
//    }
//
//    /**
//     * 解压
//     *
//     * @param inputStream
//     * @param descDir
//     */
//    public static void unzipWithStream(InputStream inputStream, String descDir, boolean keepDirStructure) {
//        if (!descDir.endsWith(File.separator)) {
//            descDir = descDir + File.separator;
//        }
//        try (ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("GBK"))) {
//            ZipEntry zipEntry;
//            while ((zipEntry = zipInputStream.getNextEntry()) != null) {
//                String zipEntryName = zipEntry.getName();
//                if (zipEntryName.contains(File.separator)) {
//                    String str1 = zipEntryName.substring(0, zipEntryName.indexOf(File.separator));
//                    if (!keepDirStructure) {
//                        zipEntryName = zipEntryName.substring(str1.length() + 1);
//                    }
//                }
//                String outPath = (descDir + zipEntryName);
//                File outFile = new File(outPath.substring(0, outPath.lastIndexOf(File.separator)));
//                if (!outFile.exists()) {
//                    outFile.mkdirs();
//                }
//                if (new File(outPath).isDirectory()) {
//                    continue;
//                }
//                writeFile(outPath, zipInputStream);
//                zipInputStream.closeEntry();
//            }
//            System.out.println("======解压成功=======");
//        } catch (IOException e) {
//            System.out.println("压缩包处理异常，异常信息{}" + e);
//        }
//    }
//
//    //将流写到文件中
//    public static void writeFile(String filePath, ZipInputStream zipInputStream) {
//        try (OutputStream outputStream = Files.newOutputStream(Paths.get(filePath))) {
//            byte[] bytes = new byte[4096];
//            int len;
//            while ((len = zipInputStream.read(bytes)) != -1) {
//                outputStream.write(bytes, 0, len);
//            }
//        } catch (IOException ex) {
//            System.out.println("解压文件时，写出到文件出错");
//        }
//    }
//
//    //测试方法
//    public static void main(String[] args) throws IOException {
//        String zipPath = "D:\\test\\源文件.zip";
//        String descDir = "D:\\test\\解压";
//        unZipFile(zipPath, descDir);
//    }
//}
//
